Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.02.2015, 19:59
Аспирант
Отправить личное сообщение для Daniel93 Посмотреть профиль Найти все сообщения от Daniel93
 
Регистрация: 21.02.2015
Сообщений: 37

Загрузка ajax'ом в определенный div
Доброго времени суток! У меня на странице блоки div формируются посредством php, данные в div вставляются из базы данных.

<?php
		$order = mysql_query("SELECT type_rem, name_pc, second_name_pc, telephone_pc, add_pc, type_pc, id_master FROM pc WHERE id_user = ".(int)$_COOKIE['id_user']) or die(mysql_error());
		while ($row = mysql_fetch_array($order)) {
			$type_rem = $row['type_rem'];
			$name_pc = $row['name_pc'];
			$second_name_pc = $row['second_name_pc'];
			$telephone_pc = $row['telephone_pc'];
			$add_pc = $row['add_pc'];
			$type_pc = $row['type_pc'];
			$id_master = $row['id_master'];
		
		$master = mysql_query("SELECT id_master, name_master, sname_master, age_master, telephone_master, expert_master, ratio_master, html_master FROM master WHERE id_master = '$id_master'") or die(mysql_error());
		while ($mast = mysql_fetch_array($master)) {
			$id_master = $mast['id_master'];
			$name_master = $mast['name_master'];			
			$sname_master = $mast['sname_master'];			
			$age_master = $mast['age_master'];		
			$expert_master = $mast['expert_master'];		
			$ratio_master = $mast['ratio_master'];		
			$html_master = $mast['html_master'];		
		}
			
		$html = "<div class='col-xs-6 col-md-4 proba'>
		<p>Пункт 1: $type_rem</p>
		<p>Пункт 1: $name_pc</p>
		<p>Пункт 1: $second_name_pc</p>
		<p>Пункт 1: $telephone_pc</p>
		<p>Пункт 1: $add_pc</p>
		<p>Пункт 1: $type_pc</p>
		<p>Пункт с id: <a href='masters/$html_master.php'>Информация о человеке</a></p>
		<div class='pok'></div>
		</div>";
		echo $html;
		}
		//echo $html;
		
		?>


По нажатию ссылки должен загружаться определенный файл. Все работает, вот код
<script>
$(document).ready(function(){
	function ajaxmaster() {
		$('.proba a').click(function(){
		var url  = $(this).attr('href');
		var th = $(this);
		$('.pok').load(url);
		return false;
	});	
	}
	$('.proba a').click(ajaxmaster());

}); // Конец ready
</script>


Все получается, все загружается, но информация загружается во все div'ы, не зависимо от того, на какую ссылку было произведено нажатие.

<script>
$(document).ready(function(){
	$('.proba a').click(function(){
		var url  = $(this).attr('href');
		var th = $(this);
		$(this).parent().load(url);
		return false;
	});

}); // Конец ready
</script>


С таким кодом все работает, загружается именно нужная информация в нужный блок, но пропадает сама ссылка.

Прошу прощения, если коряво написал.
Ответить с цитированием
  #2 (permalink)  
Старый 21.02.2015, 20:58
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Во-первых, сперва надо серверную часть менять, а уж потом о клиенте думать. У вас первый запрос содержит параметр как условие выборки второго запроса. Почему вы не делаете выборку одним запросом, а насилуете SQL запросами в цикле?
Ответить с цитированием
  #3 (permalink)  
Старый 21.02.2015, 23:13
Аспирант
Отправить личное сообщение для Daniel93 Посмотреть профиль Найти все сообщения от Daniel93
 
Регистрация: 21.02.2015
Сообщений: 37

Я понял, попытался сделать выборку сразу из двух таблиц, но у меня ошибка

$order = mysql_query("SELECR * FROM `pc` JOIN `master` ON `pc.id_master` = `master.id_master`") or die(mysql_error());
print_r($order);


Ошибка такая:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECR * FROM `pc` JOIN `master` ON `pc.id_master` = `master.id_master`' at line 1

Понимаю, что где-то в синтаксисе ошибка, но не понимаю какая
Ответить с цитированием
  #4 (permalink)  
Старый 21.02.2015, 23:30
Аспирант
Отправить личное сообщение для Daniel93 Посмотреть профиль Найти все сообщения от Daniel93
 
Регистрация: 21.02.2015
Сообщений: 37

$order = mysql_query("SELECR * FROM master m INNER JOIN pc p ON m.id_master = p.id_master") or die(mysql_error());
print_r($order);


Так тоже ошибка
Ответить с цитированием
  #5 (permalink)  
Старый 21.02.2015, 23:32
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

А что не понятного, нет в MySQL SELECR, есть SELECT.
Да и вообще нужно, запрос:
$order = mysql_query("SELECT pc.*, master.* 
                      FROM pc 
                      LEFT JOIN master
                      USING(id_master)
                      WHERE id_user = ".(int)$_COOKIE['id_user']."
                      ORDER BY id_user");

Убран вывод ошибки. Если вы хотите иметь отладку, то уж сразу либо глобально обрабатывайте ошибки, либо определяйте режим отладка/вывод, чтобы при отладке только на локальном сервере выводилось сообщение mysql_error(), а при выводе пользователям что-то нейтральное. Вы не видите в явном ошибки, а пользователю тем более это не нужно, но вот тем кто специально такое анализирует вы просто дарите подарок.

Далее - заходим сюда, внимательно изучаем описание данной функции и размышляем - "то ли я делаю?" Далее изучаем иные функции, которыми можно получить ряд результата запроса.

Но это еще не все. У вас результат первого запроса помещается в html-элементы, причем зачем-то через промежуточные переменные, а вот результат второго запроса только присваивается (постоянно) переменным, но не видно чтобы использовался. А смысл тогда во втором запросе?

Последний раз редактировалось laimas, 21.02.2015 в 23:35.
Ответить с цитированием
  #6 (permalink)  
Старый 22.02.2015, 13:00
Аспирант
Отправить личное сообщение для Daniel93 Посмотреть профиль Найти все сообщения от Daniel93
 
Регистрация: 21.02.2015
Сообщений: 37

laimas

Не знаю почему, но ваш пример кода не сработал, утром на свежую голову сел, вот что получилось. Все работает.

<?php
		$order = mysql_query("SELECT pc.*, master.* 
							FROM pc 
							INNER JOIN master 
							ON pc.id_master = master.id_master && pc.id_user = ".(int)$_COOKIE['id_user']) or die(mysql_error());
		while ($row = mysql_fetch_array($order)) {
			$type_rem = $row['type_rem'];
			$name_pc = $row['name_pc'];
			$second_name_pc = $row['second_name_pc'];
			$telephone_pc = $row['telephone_pc'];
			$add_pc = $row['add_pc'];
			$type_pc = $row['type_pc'];
			$id_master = $row['id_master'];
			$name_master = $row['name_master'];
			$sname_master = $row['sname_master'];
                        $html_master= $row['html_master'];
			
		$html = "<div class='col-xs-6 col-md-4 proba'>
		<p>Пункт 1: $type_rem</p>
		<p>Пункт 2: $name_pc</p>
		<p>Пункт 3: $second_name_pc</p>
		<p>Пункт 4: $telephone_pc</p>
		<p>Пункт 5: $add_pc</p>
		<p>Пункт 6: $type_pc</p>
		<p>Пункт с id: <a href='masters/$html_master.php'>$name_master $sname_master</a></p>
		<div class='pok'></div>
		</div>";
		echo $html;
		}

		?>


Знаю, что из таблицы мастера нужно выбрать 3 поля, а не все, с этим проблем нет, но остается проблема с ajax'ом, про которую я писал в первом посте.
Ответить с цитированием
  #7 (permalink)  
Старый 22.02.2015, 15:29
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Как об стенку горохом. Три поля, это значит:
"SELECT pc.*, CONCAT(b.name_master, ' ', b.sname_master) name, b.html_master 
							FROM pc 
							INNER JOIN master b

Не работал, потому как я не знаю о связях таблиц ваших. А об объединении JOIN к примеру тут почитать, сдается мне, что JOIN вам вообще не нужен и хватит SELECT * FROM pc, master ...

Ошибки. Определяйте:
define('DEBUG', 1);
//и в запросах
or die(DEBUG ? __FILE__ . '/' . __LINE__ . '/' . mysql_error() : 'Извините, абонет не доступен.');

Вы что собираетесь перед выставлением на сервер руками все удалять или все таки желаете "светить ошибки" свои? То что die(), это синоним exit() думаю знаете, и если в рамках асинхронного диалога этот выходе логичен, но не обязательно логично такое поведение во всех случаях.

mysql_fetch_array($order) - упорно не хотим разбираться почему так плохо? Привычка так поступать рано или поздно сыграет с вами злую шутку, например при работе с BLOB. Бывает еще круче - "Скажите пожалуйста, делаю правильно ... mysql_fetch_array() ... ,а у меня Smarty тупит, два раза выводит одно и тоже?" А кто из них тупит?

Объявлять $type_rem = $row['type_rem']; только ради того чтобы <p>Пункт 1: $type_rem</p>, это просто глупо, что нельзя сразу?:
$html = '<div class="col-xs-6 col-md-4 proba">
		<p>Пункт 1: ' . $row['type_rem'] . '</p>....'


Ну и последнее - почему $html = в вашем случае, это неверно?

Переписывайте, не дело так "кодить".

Последний раз редактировалось laimas, 22.02.2015 в 15:50.
Ответить с цитированием
  #8 (permalink)  
Старый 22.02.2015, 18:04
Аспирант
Отправить личное сообщение для Daniel93 Посмотреть профиль Найти все сообщения от Daniel93
 
Регистрация: 21.02.2015
Сообщений: 37

<?php
	define('DEBUG', 1);
	$order = mysql_query("SELECT pc.*, master.* 
						FROM pc
						INNER JOIN master 
						ON pc.id_master = master.id_master && pc.id_user = ".(int)$_COOKIE['id_user']) or die(DEBUG ? __FILE__ . '/' . __LINE__ . '/' . mysql_error() : 'Извините, ошибка');
	while ($row = mysql_fetch_assoc($order)) {
		$html = "<div class='col-xs-6 col-md-4 proba2'>
			<p>Пункт 1: $row[type_rem]</p>
			<p>Пункт 2: $row[name_pc]</p>
			<p>Пункт 3: $row[second_name_pc]</p>
			<p>Пункт 4: $row[telephone_pc]</p>
			<p>Пункт 5: $row[add_pc]</p>
			<p>Пункт 6: $row[type_pc]</p>
			<p>Пункт с id: <a href='masters/$row[html_master].php'>$row[name_master] $row[sname_master]</a></p>
			<div class='pok'></div>
		</div>";
		echo $html;
	}
?>


Вот что получилось, правильно ли я понял, что вместо mysql_fetch_array($order) нужно использовать mysql_fetch_assoc($order)?

Ну и последнее - почему $html = в вашем случае, это неверно?
В каком плане неверно?

P.S. Спасибо большое, что тратите свое время и объясняете все понятно и доступно. Я просто 3 день всего php занимаюсь, так что извините, что так много вопросов.
Ответить с цитированием
  #9 (permalink)  
Старый 22.02.2015, 19:31
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

>правильно ли я понял, что вместо mysql_fetch_array($order) нужно использовать mysql_fetch_assoc($order)

А вы читали о функции mysql_fetch_array() по ссылке, что я давал, что она возвращает без указания второго параметра? Она возвращает два идентичных набора, которые различаются типом индексов. Ну хорошо, что мало данных, но ведь и получение лишнего вам не нужного, это напрасная трата времени. А если объем данных большой, в случае BLOB, это еще и впустую забивать память совсем не нужным. Думать то надо об этом.

Заходим на официальный сайт РНР и скачиваем руководство в формате СНМ, и оно должно быть обязательной настольной книгой.

Что касается MySQL, то это расширение начиная с версии РНР 5.5 более поддерживаться не будет, и коли вы всего три дня занимаетесь, то лучше сразу переходите или на mysqli, или PDO.

Почему не верно - в вашем случае тогда уж нужно делать чистый html вывод со вставкой php-переменных, или же подготовить строку для выдачи, а вывод после цикла. Строки заключенные в двойные кавычки РНР подвергает разбору, в одинарные нет. Вывод рядов как объектов:
while ($r = mysql_fetch_object($order)) 
            $html .= '<div class="col-xs-6 col-md-4 proba2">
			<p>Пункт 1: '.$r->type_rem.'</p>
			<p>Пункт 2: '.$r->name_pc.'</p>
			<p>Пункт 3: '.$r->second_name_pc.'</p>
			<p>Пункт 4: '.$r->telephone_pc.'</p>
			<p>Пункт 5: '.$r->add_pc.'</p>
			<p>Пункт 6: '.$r->type_pc.'</p>
			<p>Пункт с id: <a href="masters/'.$r->html_master.'.php">'.$r->name.'</a></p>
			<div class="pok"></div>
		    </div>';
echo $html


Фигурные скобки не обязательны. $r->name вместо name_master и sname_master с учетом того, что эти два поля можно объединить в самом запросе:

CONCAT(master.name_master, ' ', master.sname_master) name

под псевдонимом name. Хотя никто не запрещает поступать так как вы делаете. Если вам из второй таблицы нужно только три поля, то не получайте их все - pc.*, master.*, если все нужно, можно было бы указать SELECT * FROM .... Я их примере написал так, потому как видел перечисление полей в запросах ваших, поэтому для master укажите только необходимые поля, а не выбирайте их все.

Метод .load() jQuery - он прост, прочтите по ссылке еще раз о нем.

А после всех правок и ознакомлений .... теперь можете конкретно переходить к ошибкам, то есть к обсуждению "что-то не работает", если такое будет.

Последний раз редактировалось laimas, 22.02.2015 в 21:10.
Ответить с цитированием
  #10 (permalink)  
Старый 22.02.2015, 21:29
Аспирант
Отправить личное сообщение для Daniel93 Посмотреть профиль Найти все сообщения от Daniel93
 
Регистрация: 21.02.2015
Сообщений: 37

<?php
	define('DEBUG', 1);
	$order = mysql_query("SELECT pc.*, master.name_master, master.sname_master, master.html_master 
						FROM pc
						INNER JOIN master 
						ON pc.id_master = master.id_master && pc.id_user = ".(int)$_COOKIE['id_user']) or die(DEBUG ? __FILE__ . '/' . __LINE__ . '/' . mysql_error() : 'Извините, ошибка');
while ($r = mysql_fetch_object($order)) {
            $html .= '<div class="col-xs-6 col-md-4 proba2">
			<p>Пункт 1: '.$r->type_rem.'</p>
			<p>Пункт 2: '.$r->name_pc.'</p>
			<p>Пункт 3: '.$r->second_name_pc.'</p>
			<p>Пункт 4: '.$r->telephone_pc.'</p>
			<p>Пункт 5: '.$r->add_pc.'</p>
			<p>Пункт 6: '.$r->type_pc.'</p>
			<p>Пункт с id: <a href="masters/'.$r->html_master.'.php">'.$r -> name_master.' '.$r -> sname_master.'</a></p>
			<div class="pok"></div>
		    </div>';
echo $html;

	}
?>


Почему-то выводится 6 записей, вместо 3-х, т.е. идет дублирование.

А как можно написать чистый html, если ко-во div зависит от кол-ва записей в базе? И если формировать строку для выдачи, то как это можно сделать? Хотя бы ссылки, где можно прочитать.

С функцией .load() я разобрался, все работает и загружается. Но не все точно работает.
1) Информация загружается в саму ссылку, оно и понятно, потому что идет выборка $(this).load(url);
2) Либо в тэг <p></p>, но тут тоже понятно, потому что идет такая выборка $(this).parent().load(url);
3) Либо в <div class="pok"></div>, но тогда информация грузится во все div в не зависимости от того, на какую ссылку был произведен клик
4) Хотел сделать так, чтобы он выбрал div
$(this).next().load(url), но он, почему-то, не хотел находить следующий тэг

Вот полный код
<script>
$(document).ready(function(){
	$('.proba a').click(function(){
		var url  = $(this).attr('href');
		var th = $(this);
		$('.pok').load(url);
		return false;
	});

}); // Конец ready
</script>


Извините, если коряво описал проблему
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка в DIV Алллексей Элементы интерфейса 2 02.08.2013 15:54
Загрузка скрипта в DIV KOTShalun AJAX и COMET 12 18.03.2013 16:03
Загрузка изображения в конкретный div any.zicky jQuery 2 30.07.2012 18:36
Подгрузка контента в определённый DIV при нажатии на ссылку, без перезагрузки страниц Flashton Events/DOM/Window 0 10.03.2010 19:53
Загрузка файла AJAX'ом - почему-то переводит на страницу загрузки файла .andreev AJAX и COMET 13 21.10.2009 22:25